package ControlCliente;
import ComunicacionCliente.Cliente;
import PantallasCliente.*;
import PantallasCliente.PantallaUnidoPartida;
public class ManejadorUnirsePartida {

/************atributos*******************************************/
    private ManejadorPrincipal mp;
    private ManejadorMensajesSalida mms;
    private PantallaUnirsePartida pantallaUnirsePartida;
    private PantallaEsperandoUnirsePartida PantallaEsperandoUnirsePartida;
    private PantallaUnidoPartida PantallaUnidoPartida;
    private Cliente cliente;

    private boolean partidaUnida;

    private int tipoPersonaje;
    private String nombre;
    private String ip;

/****************************************************************/


/************métodos**********************************************/
    public ManejadorUnirsePartida(){}
    public ManejadorUnirsePartida(ManejadorPrincipal mp,ManejadorMensajesEntrada mme, ManejadorMensajesSalida mms) {
        this.mp = mp;
        this.mms = mms;
        mme.setManejadorUnirsePartida(this);
        desplegarPantallaUnirsePartida();
    }

    public void generadorUnionPartida() {
        tipoPersonaje = pantallaUnirsePartida.getTipoPersonaje(); //copia los valores ingresados por el usuario de la PantallaUnirsePartida.
        nombre = pantallaUnirsePartida.getnombre();
        ip = pantallaUnirsePartida.getIP();

        cliente = new Cliente(ip, 8001);
        mms.setCliente(cliente);

        mms.MsjUnirsePartida (tipoPersonaje, nombre, ip); //le envia los datos de la partida a unirse al ManejadorMensajesSalida.
        desplegarPantallaEsperandoUnirsePartida(); //despliega una pantalla de espera hasta que llege la confirmacion del servidor.
    }

    public void recibeUnidoPartida (boolean partidaUnida) {
        partidaUnida=this.partidaUnida;

        if (partidaUnida) desplegarPantallaUnidoPartida(); //chequeo el msjACK enviado por el servidor y contesto abriendo una pantalla segun si se unio o no la partida con exito.
        else desplegarPantallaErrorUnirsePartida();
    }
    
    private void desplegarPantallaUnirsePartida() {
        pantallaUnirsePartida=new PantallaUnirsePartida (this); //tiene un boton aceptar para unirse a la partida (una vez ingresado los datos) y un boton cancelar para volver a la PantallaPrincipal.
    }

    private void desplegarPantallaEsperandoUnirsePartida() {
        PantallaEsperandoUnirsePartida=new PantallaEsperandoUnirsePartida(); //ventana sin botones que solo muestra que se esta uniendo a la partida. Despues la pantallaUnidoPartida o la pantallaErrorUnirsePartida la superponen.
    }

    private void desplegarPantallaUnidoPartida() {
        PantallaEsperandoUnirsePartida.ocultarPantalla();
        PantallaUnidoPartida=new PantallaUnidoPartida(this);  //solo tiene el mensaje y espera a que inicie la partida.
    }

    private void desplegarPantallaErrorUnirsePartida() {
        PantallaEsperandoUnirsePartida.ocultarPantalla();
        new PantallaErrorUnirsePartida(this); //solo tiene el mensaje y un boton aceptar para volver a la pantallaUnirsePartida
    }

    public void ocultarPantallaUnidoPartida () {
        PantallaUnidoPartida.ocultarPantalla();
    }

    public void mostrarPantallaUnirsePartida(){
        pantallaUnirsePartida.mostrarPantalla();
    }

    public void mostrarPantallaPrincipal(){
        mp.mostrarPantallaPrincipal();
    }
/****************************************************************/
}

